/**
 * @ Authors:
 * 
 * @Veronique De Laet
 * @Johan Willems
 * @Pierre Delaere
 * 
 * @version 2011
 */
package view;
import java.awt.Container;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.text.DefaultCaret;

import java.awt.Color;
import controller.*; //we hebben ALLE controllers uit het controller package nodig dus *

public class PlanningFrame extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = -4597071806855210301L;
	private OpstartController opstartController;
	private PlanningController planningController;
	private String cursus;
	private String lector;
	private String lokaal;
	private String dag;
	private String tijdstip;
	private String aantalPlaatsen;
	private String cursusDuur;
	private JLabel lblGepland, lblLectorVoorkeur;
	private JLabel lblStatusPlanning;
	private JButton btnRegistratie;
	private JComboBox cmbCursussen, cmbLectoren, cmbLokalen, cmbDagen, cmbUren, cmbMinuten, cmbPlaatsen, cmbDuur;
	
	
	public PlanningFrame(OpstartController opstartController, final PlanningController planningController){
		super("Planning cursussen schooljaar 2011-2012");
		this.opstartController = opstartController;
		this.setPlanningController(planningController);
		Container container = getContentPane();
		container.setBackground(Color.GRAY);
		container.setLayout(null);
		
		cmbCursussen = new JComboBox();
		for (String cursus : planningController.cursussenLijst()) {
			cmbCursussen.addItem(cursus);
		}
	
		JLabel lblCursussen = new JLabel("Selecteer een cursus");
		lblCursussen.setBounds(20, 20, 300, 30);
		cmbCursussen.setBounds(20, 50, 300, 30);
		
		lblGepland = new JLabel(getReedsGeplandTekst());
		lblGepland.setBounds(400,20,500,30);
		final JTextArea txtGepland  = new JTextArea(10,50);
		DefaultCaret cCaret = (DefaultCaret)txtGepland.getCaret();
		cCaret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
		txtGepland.setText(getFilmOverzichtTekst(cmbCursussen.getItemAt(0).toString()));
		txtGepland.setBounds(400,50,500,100);
		txtGepland.setEditable(false);
		
		cmbLectoren = new JComboBox();
		for ( String lector : planningController.lectorenLijst()) {
			cmbLectoren.addItem(lector);	
		}
		JLabel lblLectoren = new JLabel("Selecteer een lector");
		lblLectoren.setBounds(20, 150, 300, 30);
		cmbLectoren.setBounds(20, 180, 300, 30);
		
		//lectorenoverzicht
		lblLectorVoorkeur = new JLabel(getLectorVoorkeurTekst());
		lblLectorVoorkeur.setBounds(400,150,500,30);
		JTextArea txtLectorVoorkeur  = new JTextArea(10,50);
		DefaultCaret lcaret = (DefaultCaret)txtLectorVoorkeur.getCaret();
		lcaret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
		txtLectorVoorkeur.setText(getLectorOverzichtTekst(cmbCursussen.getItemAt(0).toString()));
		txtLectorVoorkeur.setBounds(400,180,500,100);
		txtLectorVoorkeur.setEditable(false);
		
		
		cmbLokalen = new JComboBox();
		for ( String lokaal : planningController.lokalenLijst()) {
			cmbLokalen.addItem(lokaal);
		}
		JLabel lblLokalen = new JLabel("Selecteer een lokaal");
		lblLokalen.setBounds(20, 280, 300, 30);
		cmbLokalen.setBounds(20, 310, 300, 30);
		
		cmbDagen = new JComboBox();
		for ( String dag : planningController.dagenLijst()) {
			cmbDagen.addItem(dag);
		}
		cmbDagen.setMaximumRowCount(6);
		JLabel lblDag = new JLabel("Selecteer dag");
		lblDag.setBounds(20, 350, 200, 30);
		cmbDagen.setBounds(20, 380, 100, 30);
		
		cmbUren = new JComboBox();
		for ( String uur : planningController.urenLijst("MAANDAG")) {
			cmbUren.addItem(uur);
		}
		cmbUren.setMaximumRowCount(7);
		JLabel lblTijd = new JLabel("Selecteer aanvangsuur");
		lblTijd.setBounds(220, 350, 300, 30);
		cmbUren.setBounds(220, 380, 80, 30);
		
		String [] plaatsen = {"10","15","20","25"};
		cmbPlaatsen = new JComboBox();
		for ( String plaats : plaatsen) {
			cmbPlaatsen.addItem(plaats);
		}
		cmbPlaatsen.setMaximumRowCount(4);
		JLabel lblPlaatsen = new JLabel("Beschikbare plaatsen");
		lblPlaatsen.setBounds(420, 350, 300, 30);
		cmbPlaatsen.setBounds(420, 380, 80, 30);
		
		String [] tijdsduur = {"2","4"};
		cmbDuur = new JComboBox();
		for ( String d : tijdsduur) {
			cmbDuur.addItem(d);
		}
		cmbDuur.setMaximumRowCount(2);
		JLabel lblDuur = new JLabel("Duur van de cursus");
		lblDuur.setBounds(620,350,300,30);
		cmbDuur.setBounds(620,380,80,30);
		
		//registratieknop
		btnRegistratie = new JButton(getRegistratieTekst());
		btnRegistratie.setBounds(20,440,900,30);
        //statusPlanning
		lblStatusPlanning = new JLabel();
		lblStatusPlanning.setForeground(Color.RED);
		lblStatusPlanning.setBounds(20,500,810,30);
		
		container.add(lblCursussen); container.add(cmbCursussen);
		container.add(lblLectoren); container.add(cmbLectoren);
		container.add(lblLokalen); container.add(cmbLokalen);
		container.add(lblDag); container.add(cmbDagen);
		container.add(lblTijd); container.add(cmbUren);
		container.add(lblPlaatsen); container.add(cmbPlaatsen);
		container.add(lblDuur);container.add(cmbDuur);
		container.add(lblGepland); container.add(txtGepland);
		container.add(lblLectorVoorkeur); container.add(txtLectorVoorkeur);
		container.add(btnRegistratie);
		container.add(lblStatusPlanning);
		
		
		//eventhandlers
		cmbCursussen.addItemListener(new ItemListener()
		{
				public void itemStateChanged(ItemEvent event){
					btnRegistratie.setText(getRegistratieTekst());
					lblGepland.setText(getReedsGeplandTekst());
					lblLectorVoorkeur.setText(getLectorVoorkeurTekst());
					txtGepland.setText(getFilmOverzichtTekst(cmbCursussen.getSelectedItem().toString()));
					
					
				}
		});
		cmbLectoren.addItemListener(new ItemListener()
	    {
			public void itemStateChanged(ItemEvent event){
				btnRegistratie.setText(getRegistratieTekst());
			}
	    });
		cmbLokalen.addItemListener(new ItemListener()
	    {
			public void itemStateChanged(ItemEvent event){
				btnRegistratie.setText(getRegistratieTekst());
			}
	    });
		cmbDagen.addItemListener(new ItemListener()
	    {
			public void itemStateChanged(ItemEvent event){
				btnRegistratie.setText(getRegistratieTekst());
				cmbUren.removeAllItems();
				for ( String uur : planningController.urenLijst(cmbDagen.getSelectedItem().toString())) {
					cmbUren.addItem(uur);	
				}
			}
	    });
		
		cmbUren.addItemListener(new ItemListener()
	    {
			public void itemStateChanged(ItemEvent event){
				btnRegistratie.setText(getRegistratieTekst());
			}
	    });
		cmbDuur.addItemListener(new ItemListener()
	    {
			public void itemStateChanged(ItemEvent event){
				btnRegistratie.setText(getRegistratieTekst());
			}
	    });		
		btnRegistratie.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				String status="";
				//Controleer business logica
				status = planningController.controleerAangebodenCursus(getRegistratieTekst());
				//als OK, voeg cursus toe aangeboden cursussen (via controller!)
				if (status.equalsIgnoreCase("")) {
					lblStatusPlanning.setText(status);
					planningController.voegCursusToe(getRegistratieTekst(),cmbPlaatsen.getSelectedItem().toString());
					txtGepland.setText(getFilmOverzichtTekst(cmbCursussen.getItemAt(0).toString()));
				}
				//als niet OK, geef fout weer in lblStatusPlanning
				else {
					lblStatusPlanning.setText(status);	
				}
				
			}
		});
		this.addWindowListener(new WindowAdapter()  
		{	          
 			public void windowClosing(WindowEvent e)
 			{  
 				setVisible(false);             
 				try {
					toonMenu();
				} catch (Exception e1) {
					e1.printStackTrace();
				}
 			}	
		});
		this.setSize(1000, 750);
		
	}
	
	private void toonMenu() throws Exception{
		opstartController.execute();
	}
	
	private String getRegistratieTekst(){
		cursus = ""+cmbCursussen.getSelectedItem();
		lector = ""+cmbLectoren.getSelectedItem();
		lokaal = ""+cmbLokalen.getSelectedItem();
		dag = ""+cmbDagen.getSelectedItem();
		tijdstip = ""+cmbUren.getSelectedItem();
		cursusDuur = ""+cmbDuur.getSelectedItem();
		return "Registreer:"+" CURSUS:"+cursus+
		                      "   LECTOR:"+lector+
		                      "   LOKAAL:"+lokaal+
		                      "   DAG:"+dag+
		                      "   AANVANG:"+tijdstip+
		                      "   DUUR:"+cursusDuur;
		                      
	}
	
	private String getFilmOverzichtTekst(String item){
		return planningController.aangebodenCursussenVoorCursus(item);
	}
	
	private String getReedsGeplandTekst(){
		return "Overzicht reeds geplande cursussen voor "+cmbCursussen.getSelectedItem();
	}
	
	
	private String getLectorOverzichtTekst(String item) {
		return planningController.lectorenVoorCursus(item);
	}

	private String getLectorVoorkeurTekst(){
		return "Overzicht beschikbare lectoren met voorkeur voor "+cmbCursussen.getSelectedItem();
	}
	
	public PlanningController getPlanningController() {
		return planningController;
	}

	public void setPlanningController(PlanningController planningController) {
		this.planningController = planningController;
	}

	public String getAantalPlaatsen() {
		return aantalPlaatsen;
	}

	public void setAantalPlaatsen(String aantalPlaatsen) {
		this.aantalPlaatsen = aantalPlaatsen;
	}

	public JComboBox getCmbMinuten() {
		return cmbMinuten;
	}

	public void setCmbMinuten(JComboBox cmbMinuten) {
		this.cmbMinuten = cmbMinuten;
	}
}
